package jobs.pattern.creational;

import java.util.List;

/**
 * Interfaz abstracta para el almacenamiento de objetos en base de datos
 *
 * @author Paul Tamayo
 * @version 1.0
 */
public interface DAOBuilder<T> {

    /**
     * Permite almacenar un objeto creado
     *
     * @param dao
     */
    void create(T dao);

    /**
     * Permite almacenar un objeto modificado
     *
     * @param dao
     */
    void edit(T dao);

    /**
     * Permite eliminar un objeto
     *
     * @param dao
     */
    void remove(T dao);

    /**
     * Permite buscar un objeto dado su identificador o código
     *
     * @param id
     * @return Objeto encontrado
     */
    T find(Object id);

    /**
     * Devuelve todos los objetos almacenados
     *
     * @return Listado de objetos
     */
    List<T> findAll();

    /**
     * Devuelve un rango de los objetos almacenados
     *
     * @param range
     * @return Listado de objetos
     */
    List<T> findRange(int[] range);

    /**
     * Devuelve la cantidad de objetos almacenados
     *
     * @return Cantidad de objetos
     */
    int count();
}
